home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 54655 / 54655.xpi / chrome / gathererPopup.jar / content / base.js next >
Text File  |  2009-12-15  |  7KB  |  243 lines

  1. Function.prototype.bind = function() {
  2.     var method = this;
  3.     var args = Array.prototype.slice.call(arguments);
  4.     var obj = args.shift();
  5.     return function BOUND_METHOD() {
  6.         return method.apply(obj,
  7.         args.concat(Array.prototype.slice.call(arguments)));
  8.     };
  9. }
  10.  
  11. var gathererPopup = {
  12.     ///////////////////////////////////////////////////////////////////
  13.     // General Utilities
  14.     ///////////////////////////////////////////////////////////////////
  15.  
  16.     rand: function rand(max) {
  17.         return Math.floor(Math.random() * max);
  18.     },
  19.  
  20.     safeObj: function safeObj(obj) {
  21.         return obj ? obj : {};
  22.     },
  23.  
  24.     safeCall: function safeCall(func) {
  25.         return func ? func : function() {};
  26.     },
  27.  
  28.     hashKeysToArray: function hashKeysToArray(hash) {
  29.         var ret = [];
  30.         for (var i in hash)
  31.             ret.push(i);
  32.         return ret;
  33.     },
  34.  
  35.     hashToArray: function hashToArray(hash) {
  36.         var ret = [];
  37.         for each (var i in hash)
  38.         ret.push(i);
  39.         return ret;
  40.     },
  41.  
  42.     arrayToHash: function arrayToHash(array, keyfunc) {
  43.         var ret = {};
  44.         for (var i=0; i<array.length; ++i)
  45.             ret[keyfunc(array[i])] = array[i];
  46.         return ret;
  47.     },
  48.  
  49.     escapeHTML: function escapeHTML(str) {
  50.         return str.replace(/&/g, "&").
  51.             replace(/</g, "<").
  52.             replace(/>/g, ">").
  53.             replace(/"/g, """);
  54.     },
  55.  
  56.     _unescapeDiv: null,
  57.     unescapeHTML: function(str) {
  58.         try {
  59.             if (!this._unescapeDiv)
  60.                 this._unescapeDiv = document.createElementNS("http://www.w3.org/1999/xhtml", "div");
  61.             this._unescapeDiv.innerHTML = this.removeHTML(str);
  62.             return this._unescapeDiv.textContent;
  63.         } catch (e) {
  64.             return this.removeHTML(str);
  65.         }
  66.     },
  67.  
  68.     removeHTML: function(str) {
  69.         return str.replace(/<.*?>/g, "");
  70.     },
  71.  
  72.     getRootWindow: function getRootWindow() {
  73.         return window.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
  74.             getInterface(Components.interfaces.nsIWebNavigation).
  75.             QueryInterface(Components.interfaces.nsIDocShellTreeItem).
  76.             rootTreeItem.
  77.             QueryInterface(Components.interfaces.nsIInterfaceRequestor).
  78.             getInterface(Components.interfaces.nsIDOMWindow);
  79.     },
  80.  
  81.     openUrl: function (url){
  82.         Application.activeWindow.open(this.makeUri(url)).focus();
  83.     },
  84.  
  85.     isActiveWindow: function() {
  86.         return this.windowMediator.getMostRecentWindow("navigator:browser") == window;
  87.     },
  88.  
  89.     ///////////////////////////////////////////////////////////////////
  90.     // Date formatting
  91.     ///////////////////////////////////////////////////////////////////
  92.  
  93.     getTime: function getTime() {
  94.         return (new Date()).getTime();
  95.     },
  96.  
  97.     getUnixTime: function getUnixTime() {
  98.         return Math.floor((new Date()).getTime() / 1000);
  99.     },
  100.  
  101.     ///////////////////////////////////////////////////////////////////
  102.     // nsIChannel related functions
  103.     ///////////////////////////////////////////////////////////////////
  104.  
  105.     makeUri: function makeUri(link, base) { // base is optional
  106.         try {
  107.             return this.iioService.newURI(link, null, base);
  108.         } catch (e) {
  109.             return null;
  110.         }
  111.     },
  112.  
  113.     get: function get(url, callback) {
  114.         var req = new XMLHttpRequest();
  115.         req.open("GET", url, true);
  116.         req.onreadystatechange = function() {
  117.             if (req.readyState == 4) {
  118.                 if(req.status == 200)
  119.                     callback(req.responseText);
  120.             }
  121.         };
  122.         req.send(null);
  123.         return req;
  124.     },
  125.  
  126.     ///////////////////////////////////////////////////////////////////
  127.     // XPCOM Services
  128.     ///////////////////////////////////////////////////////////////////
  129.  
  130.     _iioService: null,
  131.     get iioService() {
  132.         if (!this._iioService)
  133.             this._iioService = Cc["@mozilla.org/network/io-service;1"].
  134.             getService(Ci.nsIIOService);
  135.         return this._iioService;
  136.     },
  137.  
  138.     _promptService: null,
  139.     get promptService() {
  140.         if (!this._promptService)
  141.             this._promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"]
  142.         .getService(Ci.nsIPromptService);
  143.         return this._promptService;
  144.     },
  145.  
  146.     _runtimeService: null,
  147.     get runtimeService() {
  148.         if (!this._runtimeService)
  149.             this._runtimeService = Cc["@mozilla.org/xre/app-info;1"]
  150.         .getService(Ci.nsIXULRuntime);
  151.         return this._runtimeService;
  152.     },
  153.  
  154.     _windowMediator: null,
  155.     get windowMediator() {
  156.         if (!this._windowMediator)
  157.             this._windowMediator = Cc["@mozilla.org/appshell/window-mediator;1"]
  158.         .getService(Ci.nsIWindowMediator);
  159.         return this._windowMediator;
  160.     },
  161.  
  162.     ///////////////////////////////////////////////////////////////////
  163.     // Debugging
  164.     ///////////////////////////////////////////////////////////////////
  165.  
  166.     dumpFormat: function dumpFormat(obj) {
  167.         var str;
  168.         switch (typeof obj) {
  169.             case "function":
  170.                 str = "function()";
  171.                 break;
  172.             default:
  173.                 str = obj + "";
  174.                 break;
  175.         }
  176.         if (str.length > 200)
  177.             str = str.substr(0, 200) + "............";
  178.         return str;
  179.     },
  180.  
  181.     dump2: function dump2(x) {
  182.         dump(x);
  183.         return x;
  184.     },
  185.  
  186.     dumps: function dumps(obj) {
  187.         var ret = "";
  188.         ret += this.dump2("**** " + this.dumpFormat(obj) + " ****\n");
  189.         for (var i in obj) {
  190.             ret += this.dump2("." + i + " = ");
  191.             try {
  192.                 ret += this.dump2(this.dumpFormat(obj[i]))
  193.             } catch(e) { }
  194.             ret += this.dump2("\n");
  195.         }
  196.         ret += this.dump2("\n");
  197.         return ret;
  198.     },
  199.  
  200.     say: function say() {
  201.         var args = Array.prototype.slice.call(arguments); // just for cloning args
  202.         dump(args.join(", ") + "\n");
  203.     },
  204.  
  205.     sayl: function sayl() {
  206.         var args = Array.prototype.slice.call(arguments); // just for cloning args
  207.         dump(args.join(", ").substr(0, 85) + "\n");
  208.     },
  209.  
  210.     log: function log(msg) {
  211.         Application.console.log(msg);
  212.         this.say(msg);
  213.     },
  214.  
  215.     // in normal cases, just call printStackTrace() is ok
  216.     printStackTrace: function printStackTrace(stack, skipLevels) {
  217.         var stackFrame = Components.stack.caller;
  218.  
  219.         if (arguments.length > 0 && stack)
  220.             stackFrame = stack;
  221.  
  222.         if (arguments.length > 1 && skipLevels > 0) {
  223.             while (skipLevels--) {
  224.                 stackFrame = stackFrame.caller;
  225.             }
  226.         }
  227.  
  228.         while (stackFrame) {
  229.             dump(stackFrame);
  230.             dump("\n");
  231.             stackFrame = stackFrame.caller;
  232.         }
  233.     },
  234.  
  235.     assert: function assert(truth) {
  236.         if (!truth) {
  237.             this.printStackTrace(null, 1);
  238.             throw "Assertion failed";
  239.         }
  240.     }
  241. }
  242.  
  243.